﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.Xml;
using System.Xml.Linq;
using ZeroMQ;

namespace TRANSAQNet
{

    class Program
    {
        static TXmlConnector connection = new TXmlConnector();

        static StreamWriter LogFile; // переменная лог-файла

        // параметры по умолчанию
        static string sLogin;
        static string sPassword;
        static string ServerIP;
        static string ServerPort;

        // определение папки, в которой запущена программа
        static string path = @"C:\KubSU\";
        static string Dir = path;

        static void Main(string[] args)
        {
            Console.Write("Логин: ");
            sLogin = Console.ReadLine();
            Console.Write("Паспорт: ");
            sPassword = Console.ReadLine();
            Console.Write("Сервер IP: ");
            ServerIP = Console.ReadLine();
            Console.Write("Порт: ");
            ServerPort = Console.ReadLine();

            // открытие лог-файла
                path = Dir + @"log.txt";
                if (File.Exists(path)) File.Delete(path);
                File.Create(path).Close();
                LogFile = File.AppendText(path);
                WriteLog("START LOGGING");

                //var server = new Server();
                //server.MakeServer();

                var publisher = new ZmqPublishSocket
                {
                    Identity = Guid.NewGuid().ToByteArray(),
                    RecoverySeconds = 10
                };
                publisher.Connect("tcp://127.0.0.1:9292");

                Connect();
                Subscribtion(true);

                System.Threading.Thread.Sleep(1000);
                int i = 0;
                while (i < (connection.DataList.Count - 1))
                {
                    string str = connection.DataList[i];
                    publisher.Send(str);
                    Console.WriteLine(str);
                    //while (str.IndexOf("<") != -1)
                    //{
                    //    int lengthP = str.IndexOf("</");
                    //    if (lengthP != -1)
                    //    {
                    //        Console.WriteLine(str.Substring(0, lengthP));
                    //        str = str.Substring(lengthP);
                    //    }
                    //    lengthP = str.IndexOf(">");
                    //    str = str.Substring(lengthP+1);
                    //}
                    Console.WriteLine();
                    System.Threading.Thread.Sleep(1000);
                    i++;
                }

                Subscribtion(false);
                Disconnect();

            //Конец
            WriteLog("STOP LOGGING");
            LogFile.Close();

        }

        static void WriteLog(string text)
        {
            LogFile.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " " + text);
        }

        static void Connect()
        {

            // формирование текста команды
            string cmd = "<command id=\"connect\">";
            cmd += "<login>" + sLogin + "</login>";
            cmd += "<password>" + sPassword + "</password>";
            cmd += "<host>" + ServerIP + "</host>";
            cmd += "<port>" + ServerPort + "</port>";
            cmd += "<logsdir>" + Dir + "</logsdir>";
            cmd += "";
            cmd += "</command>";

            // список для хранения получаемых через коннектор данных до обработки программой
            IList<string> DataList = new List<string>();
            connection.DataList = DataList;

            // отправка команды
            string res = connection.SendCommand(cmd);
            WriteLog("Transaq_Connect. " + connection.debug_str);
        }

        static void Disconnect()
        {
            string cmd = "<command id=\"disconnect\"/>";

            string res = connection.SendCommand(cmd);
            WriteLog("Transaq_Disconnect. " + connection.debug_str);
        }

        static void Subscribtion(Boolean status)
        {
            string id = "";
            if (status) id = "subscrube"; else id = "unsubscrube";
            string cmd = "<command id=\"";
            cmd += id;
            cmd += "\">";
            cmd += "<alltrades><secid>5253</secid><secid>4024</secid></alltrades>";
            cmd += "</command>";

            string res = connection.SendCommand(cmd);
            WriteLog("Transaq_History. cmd = " + cmd);
        }

    }
}
